{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Writing a general TMM solver\n",
    "Have to solve a full ass matrix equation, but it's only 4x4, so that should be nice.\n",
    "\n",
    "After talking with Beicheng... we know only xz and yz anisotropy works. ANY xy anisotropy FAILS, which we believe to be a fundamental issue with the way the equations are formulated here. The issue with xy anisotropy is that we can no longer assume simultaneously that E and H are simple plane waves.\n",
    "\n",
    "However, one thing should be clear, our eigenvalue sorter still works in this case. More importantly, the case that works is precisely the case that we are trying to solve in our RCWA formalism. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 0.0\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "sys.path.append('../')\n",
    "from TMM_functions import PQ_matrices as pq\n",
    "from TMM_functions import scatter_matrices as sm\n",
    "from TMM_functions import redheffer_star as rs\n",
    "from TMM_functions import generate_initial_conditions as ic\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from numpy.linalg import cond\n",
    "import cmath;\n",
    "from scipy import linalg as LA\n",
    "from numpy.linalg import solve as bslash\n",
    "import time\n",
    "from convolution_matrices.convmat1D import *\n",
    "# from RCWA_1D_functions.grating_fft.grating_conv import *\n",
    "\n",
    "def nonHermitianEigenSorter(eigenvalues):\n",
    "    N = len(eigenvalues);\n",
    "    sorted_indices=[];\n",
    "    sorted_eigs = [];\n",
    "    for i in range(N):\n",
    "        eig = eigenvalues[i];\n",
    "        if(np.real(eig)>0 and np.imag(eig) == 0):\n",
    "            sorted_indices.append(i); sorted_eigs.append(eig);\n",
    "        elif(np.real(eig)==0 and np.imag(eig) > 0):\n",
    "            sorted_indices.append(i); sorted_eigs.append(eig);\n",
    "        elif(np.real(eig)>0 and abs(np.imag(eig)) > 0):\n",
    "            sorted_indices.append(i); sorted_eigs.append(eig);\n",
    "    return sorted_eigs, sorted_indices;\n",
    "\n",
    "# Moharam et. al Formulation for stable and efficient implementation for RCWA\n",
    "plt.close(\"all\")\n",
    "'''\n",
    "'''\n",
    "L0 = 1e-6;\n",
    "e0 = 8.854e-12;\n",
    "mu0 = 4*np.pi*1e-8;\n",
    "\n",
    "n_ridge = 3.48;              # ridge\n",
    "n_groove = 3.48;                # groove (unit-less)\n",
    "lattice_constant = 0.7;  # SI units\n",
    "\n",
    "## simulation parameters\n",
    "theta = (0)*np.pi/180;\n",
    "phi = (0)*np.pi/180;\n",
    "e_r = 1;\n",
    "m_r = 1;\n",
    "e_t = 1;\n",
    "m_t = 1;\n",
    "n_i = np.sqrt(e_r);\n",
    "\n",
    "normal_vector= [0,0,-1]\n",
    "\n",
    "# epsilon_tensor = np.array([[12,1,0],[0,2,0],[1,0,12]]);\n",
    "epsilon_tensor = np.array([[12,10,0],[10,12,0],[0,0,2]]);\n",
    "#epsilon_tensor = np.array([[12,5,0],[5,12,0],[0,0,12]]);\n",
    "#epsilon_tensor = np.array([[12,1,0],[0,2,0],[1,0,12]]);\n",
    "\n",
    "#epsilon_tensor = np.array([[12,0,10],[0,12,0],[10,0,12]]);\n",
    "## if the exy eyx term is equal to exx eyy, then there is a degeneracy which you have to account for.\n",
    "#epsilon_tensor = np.array([[12,0,0],[0,12,5],[0,5,12]]);\n",
    "\n",
    "mu_tensor = np.array([[1,0,0],[0,1,0],[0,0,1]])\n",
    "#epsilon_tensor = 12*np.array([[1,0,0],[0,1,0],[0,0,1]])\n",
    "I = np.matrix(np.eye(2))\n",
    "\n",
    "## specify the initial kx and ky\n",
    "k0=1\n",
    "kx = k0 *np.sin(theta)*np.cos(phi);\n",
    "ky = k0 *np.sin(theta)*np.sin(phi);\n",
    "print(kx, ky)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 0.]\n",
      " [0. 1.]] <class 'numpy.matrix'>\n"
     ]
    }
   ],
   "source": [
    "## =================  specify gap media ========================##\n",
    "e_h = 1; m_h = 1;\n",
    "Pg, Qg, kzg = pq.P_Q_kz(kx, ky, e_h, m_h)\n",
    "Wg = I;  # Wg should be the eigenmodes of the E field, which paparently is the identity, yes for a homogeneous medium\n",
    "sqrt_lambda = cmath.sqrt(-1) * Wg;\n",
    "# remember Vg is really Qg*(Omg)^-1; Vg is the eigenmodes of the H fields\n",
    "Vg = Qg * Wg * (sqrt_lambda) ** -1;\n",
    "print(Wg, type(Vg))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Note on PTE and PTM variables\n",
    "I'm looking into this on the basis that isolated polarizations should not even feel an anisotropic dielectric tensor.\n",
    "According to CEM EMLab, This specifies the wave polarization with TM being Hy, Ex, Ez and TE being Ey, Hz, Hx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "#ampltidue of the te vs tm modes (which are decoupled)\n",
    "pte = 0; #1/np.sqrt(2);\n",
    "ptm = 1; #cmath.sqrt(-1)/np.sqrt(2);\n",
    "polarization_amplitudes = [pte, ptm]\n",
    "## we can specify this...but note there is no differentation of these after we go through an anisotropic layer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## two options:\n",
    "We either write it as a second order equation with first order terms or we solve the whole thing.\n",
    "\n",
    "Solving the whole thing appears to be simpler, but we should note a few things. The biggest thing is that the modes for $W$ are not an identity matrix, which is what we typically assume, even for an isotropic medium.\n",
    "\n",
    "## debugging\n",
    "Somehow, even in the TMM formulation, I have an issue with energy conservation as soon as anisotropy is ADDED. Adding anisotropy splits the degeneracy founded in the isotropic version of the problem. This problem occurs only for exy and eyx coupling as well as combined (exz/ezx, eyz/ezy) coupling, something which we will need to figure out.\n",
    "\n",
    "\n",
    "### TM Polarization Status\n",
    "Hy, Ex, Ez, only xz anisotropy should be felt, everything else should be consistent.\n",
    "Only xy fails, which is interesting\n",
    "\n",
    "### TE Polarization Status\n",
    "Ey, Hx, Hz Should not see any anisotropy whatsoever.\n",
    "Only xy fails, which is interesting\n",
    "\n",
    "\n",
    "### Linear Combo of TE and TM Polarizations\n",
    "Interesting case, should see the effect of any anisotropy (because you have nonzero components for all E field components)\n",
    "xz is fine, but yz and xy now fails.\n",
    "\n",
    "### off normal incidence\n",
    "Should still be the same as TE and TM analysis. Does not introduce TE/TM coupling\n",
    "\n",
    "\n",
    "## What's Weird about xy anisotropy "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "ref = [];\n",
    "trans = []\n",
    "wvlen_scan = np.linspace(0.5, 4, 1000);\n",
    "thickness = 0.5; # 1 layer\n",
    "for wvlen in wvlen_scan:\n",
    "    \n",
    "    k0 = 2*np.pi/wvlen;\n",
    "    kx = np.sin(theta)*np.cos(phi);\n",
    "    ky = np.sin(theta)*np.sin(phi);\n",
    "    \n",
    "    # we will build the system by rows?\n",
    "    a11 = -1j*(ky*mu_tensor[1,2]/mu_tensor[2,2] + kx*(epsilon_tensor[2,0]/epsilon_tensor[2,2]))\n",
    "    a12 = 1j*kx*(mu_tensor[1,2]/mu_tensor[2,2] - epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "#     a13 = kx*ky/epsilon_tensor[2,2] + mu_tensor[1,0] - mu_tensor[1,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    a13 = kx*ky/epsilon_tensor[2,2] + mu_tensor[1,0] - mu_tensor[1,2]*mu_tensor[2,0]/mu_tensor[2,2];\n",
    "#     a14 = -kx**2/epsilon_tensor[2,2] + mu_tensor[1,1]-  mu_tensor[0,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    a14 = -kx**2/epsilon_tensor[2,2] + mu_tensor[1,1]-  mu_tensor[1,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    \n",
    "    a21 = 1j* ky *(mu_tensor[0,2]/mu_tensor[2,2] - epsilon_tensor[2,0]/epsilon_tensor[2,2]);\n",
    "    a22 = -1j * kx*(mu_tensor[0,2]/mu_tensor[2,2]) +ky *(epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "    a23 = ky**2/epsilon_tensor[2,2] - mu_tensor[0,0] +  mu_tensor[0,2]*mu_tensor[2,0]/mu_tensor[2,2];\n",
    "    a24 =  -kx*ky/epsilon_tensor[2,2] - mu_tensor[0,1] + mu_tensor[0,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    \n",
    "#     a31 = (kx*ky/mu_tensor[2,2] + epsilon_tensor[1,0] - epsilon_tensor[1,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2])\n",
    "    a31 = (kx*ky/mu_tensor[2,2] + epsilon_tensor[1,0] - epsilon_tensor[1,2]*epsilon_tensor[2,0]/epsilon_tensor[2,2])\n",
    "    a32 = (-kx**2/mu_tensor[2,2] +epsilon_tensor[1,1] - epsilon_tensor[1,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "#     a33 = -1j*(ky*(epsilon_tensor[1,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,0]/mu_tensor[0,0]));\n",
    "    a33 = -1j*(ky*(epsilon_tensor[1,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,0]/mu_tensor[2,2]));\n",
    "#     a34 = 1j*kx*(epsilon_tensor[1,2]/epsilon_tensor[2,2]+mu_tensor[2,1]/mu_tensor[2,2] )\n",
    "    a34 = 1j*kx*(epsilon_tensor[1,2]/epsilon_tensor[2,2]-mu_tensor[2,1]/mu_tensor[2,2] )\n",
    "    \n",
    "    a41 = ky**2/mu_tensor[2,2] - epsilon_tensor[0,0] +  epsilon_tensor[0,2]*epsilon_tensor[2,0]/epsilon_tensor[2,2];\n",
    "    a42 = -kx*ky/mu_tensor[2,2] - epsilon_tensor[0,1] + epsilon_tensor[0,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2];\n",
    "#     a43 = 1j*ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2]+mu_tensor[2,0]/mu_tensor[2,2] );\n",
    "    a43 = 1j*ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2]-mu_tensor[2,0]/mu_tensor[2,2] );\n",
    "#     a44 = -1j*(ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,1]/mu_tensor[2,2]));\n",
    "    a44 = -1j*(kx*(epsilon_tensor[0,2]/epsilon_tensor[2,2])+ky*(mu_tensor[2,1]/mu_tensor[2,2]));\n",
    "    \n",
    "    A = np.matrix([[a11, a12, a13, a14],\n",
    "                  [a21, a22, a23, a24],\n",
    "                  [a31, a32, a33, a34],\n",
    "                  [a41, a42, a43, a44]]);\n",
    "    \n",
    "    #print(np.linalg.cond(A))\n",
    "    eigenvals, eigenmodes = np.linalg.eig(A);\n",
    "    rounded_eigenvals = np.round(eigenvals, 3)\n",
    "    #print(eigenvals)\n",
    "    \n",
    "    #print(np.round(eigenvals,3)); print(np.round(eigenmodes,3))\n",
    "    \n",
    "    ## suppose we directly diagonalize this matrix.\n",
    "    \n",
    "    \n",
    "    ## we need to siphon off the forward propagating modes.\n",
    "    sorted_eigs, sorted_inds = nonHermitianEigenSorter(np.round(eigenvals,10));\n",
    "#     sorted_inds = [1,3];\n",
    "#     sorted_eigs = eigenvals[sorted_inds];\n",
    "    #print(sorted_eigs) ## since we have Ey, Ex, Hy, Hx, on a uniform slab, there is a 2-fold degeneracy \n",
    "    \n",
    "#     plt.plot(np.real(rounded_eigenvals), np.imag(rounded_eigenvals), 'o')\n",
    "#     plt.plot(np.real(sorted_eigs), np.imag(sorted_eigs), '.r')\n",
    "#     plt.show()\n",
    "    \n",
    "    ## ========================================================\n",
    "    W_i = eigenmodes[0:2, sorted_inds];\n",
    "    V_i = eigenmodes[2:, sorted_inds];\n",
    "    Om =  np.matrix(np.diag(sorted_eigs) );\n",
    "    #print(np.round(W_i,3), np.round(V_i,3), np.round(Om,3))\n",
    "    \n",
    "    #then what... match boundary conditions... try using the gaylord formulation.\n",
    "    # or use the scattering matrix formalism, where we still, technically deal with all field components...\n",
    "    \n",
    "    Sg11 = np.matrix(np.zeros((2, 2))); Sg12 = np.matrix(np.eye(2, 2));\n",
    "    Sg21 = np.matrix(np.eye(2, 2)); Sg22 = np.matrix(np.zeros((2, 2)));  # matrices\n",
    "    Sg = np.block([[Sg11, Sg12], [Sg21, Sg22]]);  # initialization is equivelant as that for S_reflection side matrix\n",
    "\n",
    "    ### ================= Working on the Reflection Side =========== ##\n",
    "    Pr, Qr, kzr = pq.P_Q_kz(kx, ky, e_r, m_r)\n",
    "\n",
    "    ## ============== values to keep track of =======================##\n",
    "    S_matrices = list();\n",
    "    kz_storage = [kzr];\n",
    "    X_storage = list();\n",
    "    ## ==============================================================##\n",
    "\n",
    "    # define vacuum wavevector k0\n",
    "    lam0 = wvlen;  # k0 and lam0 are related by 2*pi/lam0 = k0\n",
    "    k0 = 2*np.pi/lam0;\n",
    "    ## modes of the layer\n",
    "    Om_r = np.matrix(cmath.sqrt(-1) * kzr * I);\n",
    "    X_storage.append(Om_r);\n",
    "    W_ref = I;\n",
    "    V_ref = Qr * Om_r.I;  # can't play games with V like with W because matrices for V are complex\n",
    "    #print(Om_r)\n",
    "    ## calculating A and B matrices for scattering matrix\n",
    "    Ar, Br = sm.A_B_matrices(Wg, W_ref, Vg, V_ref);\n",
    "\n",
    "    S_ref, Sr_dict = sm.S_R(Ar, Br);  # scatter matrix for the reflection region\n",
    "    S_matrices.append(S_ref);\n",
    "    Sg, D_r, F_r = rs.RedhefferStar(Sg, S_ref);\n",
    "\n",
    "    # longitudinal k_vector\n",
    "    ## ============ WORKING INSIDE ANISOTROPIC LAYER ================#\n",
    "    # now defIne A and B\n",
    "    A, B = sm.A_B_matrices(Wg, W_i, Vg, V_i);\n",
    "\n",
    "    # calculate scattering matrix\n",
    "    S_layer, Sl_dict = sm.S_layer(A, B, thickness, k0, Om)\n",
    "    S_matrices.append(S_layer);\n",
    "\n",
    "    ## update global scattering matrix using redheffer star\n",
    "    Sg, D_i, F_i = rs.RedhefferStar(Sg, S_layer);\n",
    "\n",
    "    ##========= Working on the Transmission Side==============##\n",
    "    Pt, Qt, kz_trans = pq.P_Q_kz(kx, ky, e_t, m_t);\n",
    "    kz_storage.append(kz_trans);\n",
    "\n",
    "    Omt = cmath.sqrt(-1) * kz_trans * I;\n",
    "    Vt = Qt * np.linalg.inv(Omt);\n",
    "\n",
    "    # get At, Bt\n",
    "    At, Bt = sm.A_B_matrices(Wg, I, Vg, Vt)\n",
    "\n",
    "    ST, ST_dict = sm.S_T(At, Bt)\n",
    "    S_matrices.append(ST);\n",
    "    # update global scattering matrix\n",
    "    Sg, D_t, F_t = rs.RedhefferStar(Sg, ST);\n",
    "\n",
    "    K_inc_vector = n_i * k0 * np.matrix([np.sin(theta) * np.cos(phi), \\\n",
    "                                         np.sin(theta) * np.sin(phi), np.cos(theta)]);\n",
    "\n",
    "    # cinc is the c1+\n",
    "    E_inc, cinc, Polarization = ic.initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm)\n",
    "\n",
    "    ## COMPUTE FIELDS\n",
    "    Er = Sg[0:2, 0:2] * cinc;  # S11; #(cinc = initial mode amplitudes), cout = Sg*cinc; #2d because Ex, Ey...\n",
    "    Et = Sg[2:, 0:2] * cinc;  # S21\n",
    "\n",
    "    Er = np.squeeze(np.asarray(Er));\n",
    "    Et = np.squeeze(np.asarray(Et));\n",
    "\n",
    "    Erx = Er[0];  Ery = Er[1]; Etx = Et[0]; Ety = Et[1];\n",
    "\n",
    "    # apply the grad(E) = 0 equation to get z components, this equation comes out of the longitudinal equation \n",
    "    # or the divergence equation and is valid since the transmission region is VACUUM (as is the reflection region)\n",
    "    Erz = -(kx * Erx + ky * Ery) / kzr; #uses the divergence law\n",
    "    Etz = -(kx * Etx + ky * Ety) / kz_trans;  ## using divergence of E equation here\n",
    "\n",
    "    # add in the Erz component to vectors\n",
    "    Er = np.matrix([Erx, Ery, Erz]);  # a vector\n",
    "    Et = np.matrix([Etx, Ety, Etz]);\n",
    "\n",
    "    R = np.linalg.norm(Er) ** 2;\n",
    "    T = np.linalg.norm(Et) ** 2;\n",
    "    ref.append(R);\n",
    "    trans.append(T);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 0. 0.]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(None,)"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(E_inc), #one x and one z\n",
    "# print(Wg)\n",
    "# print(Vg)\n",
    "# print(Om_r)\n",
    "# # print(ref)\n",
    "# # print(trans)\n",
    "# # print(np.round(eigenmodes,3))\n",
    "# # print(sorted_inds)\n",
    "# # print(Vg)\n",
    "# print(eigenvals)\n",
    "# print(np.round(eigenmodes))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ref = np.array(ref);\n",
    "trans = np.array(trans)\n",
    "plt.plot(wvlen_scan, ref);\n",
    "plt.plot(wvlen_scan, trans);\n",
    "plt.plot(wvlen_scan, ref+trans)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## figuring out xy to diagonal anisotropy\n",
    "So what if we diagonalize the xy part?\n",
    "\n",
    "No, that shouldn't be necessary. As Beicheng mentioned, x-y anisotropy should still result in a block sparse matrix!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3,)\n",
      "(3, 3)\n",
      "[[12.  0.  0.]\n",
      " [ 0. 17.  0.]\n",
      " [ 0.  0.  7.]]\n",
      "[[12  5  0]\n",
      " [ 5 12  0]\n",
      " [ 0 10 12]]\n",
      "[[ 0.          0.40824829  0.40824829]\n",
      " [ 0.          0.40824829 -0.40824829]\n",
      " [ 1.          0.81649658  0.81649658]]\n"
     ]
    }
   ],
   "source": [
    "epsilon_tensor = np.array([[12,5,0],[5,12,0],[0,10,12]]);\n",
    "\n",
    "## ================================================\n",
    "#diagonalize\n",
    "eps_diag, eps_eigens= np.linalg.eig(epsilon_tensor)\n",
    "print(eps_diag.shape)\n",
    "print(eps_eigens.shape) #we need to project all E fields onto this basis, specifically the Ex and Ey fields...\n",
    "##============\n",
    "\n",
    "eps_diag = np.diag(eps_diag)\n",
    "print(eps_diag)\n",
    "#here's the thing, what do we do with the rest?\n",
    "# we have to reformulate the problem because every E component gets effectively rescaled...fuck\n",
    "print(epsilon_tensor)\n",
    "epsilon_tensor = eps_diag;\n",
    "print(eps_eigens)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n",
      "(2, 2)\n"
     ]
    }
   ],
   "source": [
    "#=====================================\n",
    "\n",
    "\n",
    "ref = [];\n",
    "trans = []\n",
    "wvlen_scan = np.linspace(0.5, 4, 1000);\n",
    "thickness = 0.5; # 1 layer\n",
    "for wvlen in wvlen_scan:\n",
    "    k0 = 2*np.pi/wvlen;\n",
    "    kx = np.sin(theta)*np.cos(phi);\n",
    "    ky = np.sin(theta)*np.sin(phi);\n",
    "    \n",
    "    # we will build the system by rows?\n",
    "    a11 = -1j*(ky*mu_tensor[1,2]/mu_tensor[2,2] + kx*(epsilon_tensor[2,0]/epsilon_tensor[2,2]))\n",
    "    a12 = 1j*kx*(mu_tensor[1,2]/mu_tensor[2,2] - epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "#     a13 = kx*ky/epsilon_tensor[2,2] + mu_tensor[1,0] - mu_tensor[1,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    a13 = kx*ky/epsilon_tensor[2,2] + mu_tensor[1,0] - mu_tensor[1,2]*mu_tensor[2,0]/mu_tensor[2,2];\n",
    "#     a14 = -kx**2/epsilon_tensor[2,2] + mu_tensor[1,1]-  mu_tensor[0,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    a14 = -kx**2/epsilon_tensor[2,2] + mu_tensor[1,1]-  mu_tensor[1,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    \n",
    "    a21 = 1j* ky *(mu_tensor[0,2]/mu_tensor[2,2] - epsilon_tensor[2,0]/epsilon_tensor[2,2]);\n",
    "    a22 = -1j * kx*(mu_tensor[0,2]/mu_tensor[2,2]) +ky *(epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "    a23 = ky**2/epsilon_tensor[2,2] - mu_tensor[0,0] +  mu_tensor[0,2]*mu_tensor[2,0]/mu_tensor[2,2];\n",
    "    a24 =  -kx*ky/epsilon_tensor[2,2] - mu_tensor[0,1] + mu_tensor[0,2]*mu_tensor[2,1]/mu_tensor[2,2];\n",
    "    \n",
    "#     a31 = (kx*ky/mu_tensor[2,2] + epsilon_tensor[1,0] - epsilon_tensor[1,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2])\n",
    "    a31 = (kx*ky/mu_tensor[2,2] + epsilon_tensor[1,0] - epsilon_tensor[1,2]*epsilon_tensor[2,0]/epsilon_tensor[2,2])\n",
    "    a32 = (-kx**2/mu_tensor[2,2] +epsilon_tensor[1,1] - epsilon_tensor[1,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2]);\n",
    "#     a33 = -1j*(ky*(epsilon_tensor[1,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,0]/mu_tensor[0,0]));\n",
    "    a33 = -1j*(ky*(epsilon_tensor[1,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,0]/mu_tensor[2,2]));\n",
    "#     a34 = 1j*kx*(epsilon_tensor[1,2]/epsilon_tensor[2,2]+mu_tensor[2,1]/mu_tensor[2,2] )\n",
    "    a34 = 1j*kx*(epsilon_tensor[1,2]/epsilon_tensor[2,2]-mu_tensor[2,1]/mu_tensor[2,2] )\n",
    "    \n",
    "    a41 = ky**2/mu_tensor[2,2] - epsilon_tensor[0,0] +  epsilon_tensor[0,2]*epsilon_tensor[2,0]/epsilon_tensor[2,2];\n",
    "    a42 = -kx*ky/mu_tensor[2,2] - epsilon_tensor[0,1] + epsilon_tensor[0,2]*epsilon_tensor[2,1]/epsilon_tensor[2,2];\n",
    "#     a43 = 1j*ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2]+mu_tensor[2,0]/mu_tensor[2,2] );\n",
    "    a43 = 1j*ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2]-mu_tensor[2,0]/mu_tensor[2,2] );\n",
    "#     a44 = -1j*(ky*(epsilon_tensor[0,2]/epsilon_tensor[2,2])+kx*(mu_tensor[2,1]/mu_tensor[2,2]));\n",
    "    a44 = -1j*(kx*(epsilon_tensor[0,2]/epsilon_tensor[2,2])+ky*(mu_tensor[2,1]/mu_tensor[2,2]));\n",
    "    \n",
    "    A0 = np.matrix([[a11, a12, a13, a14],\n",
    "                  [a21, a22, a23, a24],\n",
    "                  [a31, a32, a33, a34],\n",
    "                  [a41, a42, a43, a44]]);\n",
    "    \n",
    "#     this is wrong...there are three eigenvectors from the rescaling...\n",
    "#     rescaled1 = eps_eigens[0:2, 0:2]*A0[0:2, 0:2];\n",
    "#     rescaled2 = eps_eigens[0:2, 0:2]*A0[2:, 0:2];\n",
    "    \n",
    "#     #print(rescaled2.shape)\n",
    "#     A0[0:2, 0:2] = rescaled1;\n",
    "#     A0[2:, 0:2] = rescaled2;\n",
    "#     print(A0.shape)\n",
    "#     print(A0)\n",
    "    #print(np.linalg.cond(A))\n",
    "    eigenvals, eigenmodes = np.linalg.eig(A0);\n",
    "    rounded_eigenvals = np.round(eigenvals, 3)\n",
    "\n",
    "    \n",
    "    #print(np.round(eigenvals,3)); print(np.round(eigenmodes,3))\n",
    "    \n",
    "    ## suppose we directly diagonalize this matrix.\n",
    "    \n",
    "    \n",
    "    ## we need to siphon off the forward propagating modes.\n",
    "    sorted_eigs, sorted_inds = nonHermitianEigenSorter(np.round(eigenvals,10));\n",
    "#     sorted_inds = [1,3];\n",
    "#     sorted_eigs = eigenvals[sorted_inds];\n",
    "    #print(sorted_eigs) ## since we have Ey, Ex, Hy, Hx, on a uniform slab, there is a 2-fold degeneracy \n",
    "    \n",
    "#     plt.plot(np.real(rounded_eigenvals), np.imag(rounded_eigenvals), 'o')\n",
    "#     plt.plot(np.real(sorted_eigs), np.imag(sorted_eigs), '.r')\n",
    "#     plt.show()\n",
    "    \n",
    "    ## ========================================================\n",
    "    W_i = eigenmodes[0:2, sorted_inds];\n",
    "    V_i = eigenmodes[2:, sorted_inds];\n",
    "    Om =  np.matrix(np.diag(sorted_eigs) );\n",
    "    print(Om.shape)\n",
    "    #print(np.round(W_i,3), np.round(V_i,3), np.round(Om,3))\n",
    "    \n",
    "    #then what... match boundary conditions... try using the gaylord formulation.\n",
    "    # or use the scattering matrix formalism, where we still, technically deal with all field components...\n",
    "    \n",
    "    Sg11 = np.matrix(np.zeros((2, 2))); Sg12 = np.matrix(np.eye(2, 2));\n",
    "    Sg21 = np.matrix(np.eye(2, 2)); Sg22 = np.matrix(np.zeros((2, 2)));  # matrices\n",
    "    Sg = np.block([[Sg11, Sg12], [Sg21, Sg22]]);  # initialization is equivelant as that for S_reflection side matrix\n",
    "\n",
    "    ### ================= Working on the Reflection Side =========== ##\n",
    "    Pr, Qr, kzr = pq.P_Q_kz(kx, ky, e_r, m_r)\n",
    "\n",
    "    ## ============== values to keep track of =======================##\n",
    "    S_matrices = list();\n",
    "    kz_storage = [kzr];\n",
    "    X_storage = list();\n",
    "    ## ==============================================================##\n",
    "\n",
    "    # define vacuum wavevector k0\n",
    "    lam0 = wvlen;  # k0 and lam0 are related by 2*pi/lam0 = k0\n",
    "    k0 = 2*np.pi/lam0;\n",
    "    ## modes of the layer\n",
    "    Om_r = np.matrix(cmath.sqrt(-1) * kzr * I);\n",
    "    X_storage.append(Om_r);\n",
    "    W_ref = I;\n",
    "    V_ref = Qr * Om_r.I;  # can't play games with V like with W because matrices for V are complex\n",
    "    #print(Om_r)\n",
    "    ## calculating A and B matrices for scattering matrix\n",
    "    Ar, Br = sm.A_B_matrices(Wg, W_ref, Vg, V_ref);\n",
    "\n",
    "    S_ref, Sr_dict = sm.S_R(Ar, Br);  # scatter matrix for the reflection region\n",
    "    S_matrices.append(S_ref);\n",
    "    Sg, D_r, F_r = rs.RedhefferStar(Sg, S_ref);\n",
    "\n",
    "    # longitudinal k_vector\n",
    "    ## ============ WORKING INSIDE ANISOTROPIC LAYER ================#\n",
    "    # now defIne A and B\n",
    "    A, B = sm.A_B_matrices(Wg, W_i, Vg, V_i);\n",
    "    print(A.shape)\n",
    "    # calculate scattering matrix\n",
    "    S_layer, Sl_dict = sm.S_layer(A, B, thickness, k0, Om)\n",
    "    S_matrices.append(S_layer);\n",
    "\n",
    "    ## update global scattering matrix using redheffer star\n",
    "    Sg, D_i, F_i = rs.RedhefferStar(Sg, S_layer);\n",
    "\n",
    "    ##========= Working on the Transmission Side==============##\n",
    "    Pt, Qt, kz_trans = pq.P_Q_kz(kx, ky, e_t, m_t);\n",
    "    kz_storage.append(kz_trans);\n",
    "\n",
    "    Omt = cmath.sqrt(-1) * kz_trans * I;\n",
    "    Vt = Qt * np.linalg.inv(Omt);\n",
    "\n",
    "    # get At, Bt\n",
    "    At, Bt = sm.A_B_matrices(Wg, I, Vg, Vt)\n",
    "\n",
    "    ST, ST_dict = sm.S_T(At, Bt)\n",
    "    S_matrices.append(ST);\n",
    "    # update global scattering matrix\n",
    "    Sg, D_t, F_t = rs.RedhefferStar(Sg, ST);\n",
    "\n",
    "    K_inc_vector = n_i * k0 * np.matrix([np.sin(theta) * np.cos(phi), \\\n",
    "                                         np.sin(theta) * np.sin(phi), np.cos(theta)]);\n",
    "\n",
    "    # cinc is the c1+\n",
    "    E_inc, cinc, Polarization = ic.initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm)\n",
    "\n",
    "    ## COMPUTE FIELDS\n",
    "    Er = Sg[0:2, 0:2] * cinc;  # S11; #(cinc = initial mode amplitudes), cout = Sg*cinc; #2d because Ex, Ey...\n",
    "    Et = Sg[2:, 0:2] * cinc;  # S21\n",
    "\n",
    "    Er = np.squeeze(np.asarray(Er));\n",
    "    Et = np.squeeze(np.asarray(Et));\n",
    "\n",
    "    Erx = Er[0];  Ery = Er[1]; Etx = Et[0]; Ety = Et[1];\n",
    "\n",
    "    # apply the grad(E) = 0 equation to get z components, this equation comes out of the longitudinal equation \n",
    "    # or the divergence equation and is valid since the transmission region is VACUUM (as is the reflection region)\n",
    "    Erz = -(kx * Erx + ky * Ery) / kzr;\n",
    "    Etz = -(kx * Etx + ky * Ety) / kz_trans;  ## using divergence of E equation here\n",
    "\n",
    "    # add in the Erz component to vectors\n",
    "    Er = np.matrix([Erx, Ery, Erz]);  # a vector\n",
    "    Et = np.matrix([Etx, Ety, Etz]);\n",
    "\n",
    "    R = np.linalg.norm(Er) ** 2;\n",
    "    T = np.linalg.norm(Et) ** 2;\n",
    "    ref.append(R);\n",
    "    trans.append(T);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[12.  0.  0.]\n",
      " [ 0. 17.  0.]\n",
      " [ 0.  0.  7.]]\n"
     ]
    }
   ],
   "source": [
    "ref = np.array(ref);\n",
    "trans = np.array(trans)\n",
    "plt.plot(wvlen_scan, ref);\n",
    "plt.plot(wvlen_scan, trans);\n",
    "plt.plot(wvlen_scan, ref+trans)\n",
    "plt.show()\n",
    "\n",
    "print(epsilon_tensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
